#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "kiss_fftr.h"
#include "kiss_fft.h"
#include "_kiss_fft_guts.h"

// copied from kiss_fftr.c
struct __attribute__((__packed__)) kiss_fftr_state {
    kiss_fft_cfg substate;
    kiss_fft_cpx * tmpbuf;
    kiss_fft_cpx * super_twiddles;
};

struct __attribute__((__packed__)) kiss_fft_state_precomputed{
    int nfft;
    int inverse;
    int factors[2*MAXFACTORS];
    kiss_fft_cpx twiddles[256];
};

struct kiss_fft_state_precomputed g_fft_state = {256, 0, {4, 64, 4, 16, 4, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {{32767, 0}, {32757, -804}, {32728, -1608}, {32678, -2410}, {32609, -3212}, {32521, -4011}, {32412, -4808}, {32285, -5602}, {32137, -6393}, {31971, -7179}, {31785, -7962}, {31580, -8739}, {31356, -9512}, {31113, -10278}, {30852, -11039}, {30571, -11793}, {30273, -12539}, {29956, -13279}, {29621, -14010}, {29268, -14732}, {28898, -15446}, {28510, -16151}, {28105, -16846}, {27683, -17530}, {27245, -18204}, {26790, -18868}, {26319, -19519}, {25832, -20159}, {25329, -20787}, {24811, -21403}, {24279, -22005}, {23731, -22594}, {23170, -23170}, {22594, -23731}, {22005, -24279}, {21403, -24811}, {20787, -25329}, {20159, -25832}, {19519, -26319}, {18868, -26790}, {18204, -27245}, {17530, -27683}, {16846, -28105}, {16151, -28510}, {15446, -28898}, {14732, -29268}, {14010, -29621}, {13279, -29956}, {12539, -30273}, {11793, -30571}, {11039, -30852}, {10278, -31113}, {9512, -31356}, {8739, -31580}, {7962, -31785}, {7179, -31971}, {6393, -32137}, {5602, -32285}, {4808, -32412}, {4011, -32521}, {3212, -32609}, {2410, -32678}, {1608, -32728}, {804, -32757}, {0, -32767}, {-804, -32757}, {-1608, -32728}, {-2410, -32678}, {-3212, -32609}, {-4011, -32521}, {-4808, -32412}, {-5602, -32285}, {-6393, -32137}, {-7179, -31971}, {-7962, -31785}, {-8739, -31580}, {-9512, -31356}, {-10278, -31113}, {-11039, -30852}, {-11793, -30571}, {-12539, -30273}, {-13279, -29956}, {-14010, -29621}, {-14732, -29268}, {-15446, -28898}, {-16151, -28510}, {-16846, -28105}, {-17530, -27683}, {-18204, -27245}, {-18868, -26790}, {-19519, -26319}, {-20159, -25832}, {-20787, -25329}, {-21403, -24811}, {-22005, -24279}, {-22594, -23731}, {-23170, -23170}, {-23731, -22594}, {-24279, -22005}, {-24811, -21403}, {-25329, -20787}, {-25832, -20159}, {-26319, -19519}, {-26790, -18868}, {-27245, -18204}, {-27683, -17530}, {-28105, -16846}, {-28510, -16151}, {-28898, -15446}, {-29268, -14732}, {-29621, -14010}, {-29956, -13279}, {-30273, -12539}, {-30571, -11793}, {-30852, -11039}, {-31113, -10278}, {-31356, -9512}, {-31580, -8739}, {-31785, -7962}, {-31971, -7179}, {-32137, -6393}, {-32285, -5602}, {-32412, -4808}, {-32521, -4011}, {-32609, -3212}, {-32678, -2410}, {-32728, -1608}, {-32757, -804}, {-32767, 0}, {-32757, 804}, {-32728, 1608}, {-32678, 2410}, {-32609, 3212}, {-32521, 4011}, {-32412, 4808}, {-32285, 5602}, {-32137, 6393}, {-31971, 7179}, {-31785, 7962}, {-31580, 8739}, {-31356, 9512}, {-31113, 10278}, {-30852, 11039}, {-30571, 11793}, {-30273, 12539}, {-29956, 13279}, {-29621, 14010}, {-29268, 14732}, {-28898, 15446}, {-28510, 16151}, {-28105, 16846}, {-27683, 17530}, {-27245, 18204}, {-26790, 18868}, {-26319, 19519}, {-25832, 20159}, {-25329, 20787}, {-24811, 21403}, {-24279, 22005}, {-23731, 22594}, {-23170, 23170}, {-22594, 23731}, {-22005, 24279}, {-21403, 24811}, {-20787, 25329}, {-20159, 25832}, {-19519, 26319}, {-18868, 26790}, {-18204, 27245}, {-17530, 27683}, {-16846, 28105}, {-16151, 28510}, {-15446, 28898}, {-14732, 29268}, {-14010, 29621}, {-13279, 29956}, {-12539, 30273}, {-11793, 30571}, {-11039, 30852}, {-10278, 31113}, {-9512, 31356}, {-8739, 31580}, {-7962, 31785}, {-7179, 31971}, {-6393, 32137}, {-5602, 32285}, {-4808, 32412}, {-4011, 32521}, {-3212, 32609}, {-2410, 32678}, {-1608, 32728}, {-804, 32757}, {0, 32767}, {804, 32757}, {1608, 32728}, {2410, 32678}, {3212, 32609}, {4011, 32521}, {4808, 32412}, {5602, 32285}, {6393, 32137}, {7179, 31971}, {7962, 31785}, {8739, 31580}, {9512, 31356}, {10278, 31113}, {11039, 30852}, {11793, 30571}, {12539, 30273}, {13279, 29956}, {14010, 29621}, {14732, 29268}, {15446, 28898}, {16151, 28510}, {16846, 28105}, {17530, 27683}, {18204, 27245}, {18868, 26790}, {19519, 26319}, {20159, 25832}, {20787, 25329}, {21403, 24811}, {22005, 24279}, {22594, 23731}, {23170, 23170}, {23731, 22594}, {24279, 22005}, {24811, 21403}, {25329, 20787}, {25832, 20159}, {26319, 19519}, {26790, 18868}, {27245, 18204}, {27683, 17530}, {28105, 16846}, {28510, 16151}, {28898, 15446}, {29268, 14732}, {29621, 14010}, {29956, 13279}, {30273, 12539}, {30571, 11793}, {30852, 11039}, {31113, 10278}, {31356, 9512}, {31580, 8739}, {31785, 7962}, {31971, 7179}, {32137, 6393}, {32285, 5602}, {32412, 4808}, {32521, 4011}, {32609, 3212}, {32678, 2410}, {32728, 1608}, {32757, 804}, }};

kiss_fft_cpx g_fftr_state_tmpbuf[512];
kiss_fft_cpx g_fftr_state_super_twiddles[256]  =  {{-402, -32765}, {-804, -32757}, {-1206, -32745}, {-1608, -32728}, {-2009, -32705}, {-2410, -32678}, {-2811, -32646}, {-3212, -32609}, {-3612, -32567}, {-4011, -32521}, {-4410, -32469}, {-4808, -32412}, {-5205, -32351}, {-5602, -32285}, {-5998, -32213}, {-6393, -32137}, {-6786, -32057}, {-7179, -31971}, {-7571, -31880}, {-7962, -31785}, {-8351, -31685}, {-8739, -31580}, {-9126, -31470}, {-9512, -31356}, {-9896, -31237}, {-10278, -31113}, {-10659, -30985}, {-11039, -30852}, {-11417, -30714}, {-11793, -30571}, {-12167, -30424}, {-12539, -30273}, {-12910, -30117}, {-13279, -29956}, {-13645, -29791}, {-14010, -29621}, {-14372, -29447}, {-14732, -29268}, {-15090, -29085}, {-15446, -28898}, {-15800, -28706}, {-16151, -28510}, {-16499, -28310}, {-16846, -28105}, {-17189, -27896}, {-17530, -27683}, {-17869, -27466}, {-18204, -27245}, {-18537, -27019}, {-18868, -26790}, {-19195, -26556}, {-19519, -26319}, {-19841, -26077}, {-20159, -25832}, {-20475, -25582}, {-20787, -25329}, {-21096, -25072}, {-21403, -24811}, {-21705, -24547}, {-22005, -24279}, {-22301, -24007}, {-22594, -23731}, {-22884, -23452}, {-23170, -23170}, {-23452, -22884}, {-23731, -22594}, {-24007, -22301}, {-24279, -22005}, {-24547, -21705}, {-24811, -21403}, {-25072, -21096}, {-25329, -20787}, {-25582, -20475}, {-25832, -20159}, {-26077, -19841}, {-26319, -19519}, {-26556, -19195}, {-26790, -18868}, {-27019, -18537}, {-27245, -18204}, {-27466, -17869}, {-27683, -17530}, {-27896, -17189}, {-28105, -16846}, {-28310, -16499}, {-28510, -16151}, {-28706, -15800}, {-28898, -15446}, {-29085, -15090}, {-29268, -14732}, {-29447, -14372}, {-29621, -14010}, {-29791, -13645}, {-29956, -13279}, {-30117, -12910}, {-30273, -12539}, {-30424, -12167}, {-30571, -11793}, {-30714, -11417}, {-30852, -11039}, {-30985, -10659}, {-31113, -10278}, {-31237, -9896}, {-31356, -9512}, {-31470, -9126}, {-31580, -8739}, {-31685, -8351}, {-31785, -7962}, {-31880, -7571}, {-31971, -7179}, {-32057, -6786}, {-32137, -6393}, {-32213, -5998}, {-32285, -5602}, {-32351, -5205}, {-32412, -4808}, {-32469, -4410}, {-32521, -4011}, {-32567, -3612}, {-32609, -3212}, {-32646, -2811}, {-32678, -2410}, {-32705, -2009}, {-32728, -1608}, {-32745, -1206}, {-32757, -804}, {-32765, -402}, {-32767, 0}, {0, 0}, {0, 0}, {2865, 0}, {0, 0}, {-19592, 522}, {0, 0}, {-18304, 522}, {0, 0}, {-17280, 522}, {0, 0}, {256, 0}, {1, 0}, {4, 0}, {64, 0}, {4, 0}, {16, 0}, {4, 0}, {4, 0}, {4, 0}, {1, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {32767, 0}, {32757, 804}, {32728, 1608}, {32678, 2410}, {32609, 3212}, {32521, 4011}, {32412, 4808}, {32285, 5602}, {32137, 6393}, {31971, 7179}, {31785, 7962}, {31580, 8739}, {31356, 9512}, {31113, 10278}, {30852, 11039}, {30571, 11793}, {30273, 12539}, {29956, 13279}, {29621, 14010}, {29268, 14732}, {28898, 15446}, {28510, 16151}, {28105, 16846}, {27683, 17530}, {27245, 18204}, {26790, 18868}, {26319, 19519}, {25832, 20159}, {25329, 20787}, {24811, 21403}, {24279, 22005}, {23731, 22594}, {23170, 23170}, {22594, 23731}, {22005, 24279}, {21403, 24811}, {20787, 25329}, {20159, 25832}, {19519, 26319}, {18868, 26790}, {18204, 27245}, {17530, 27683}, {16846, 28105}, {16151, 28510}, {15446, 28898}, {14732, 29268}, {14010, 29621}, {13279, 29956}, {12539, 30273}, {11793, 30571}, {11039, 30852}, {10278, 31113}};

struct kiss_fftr_state g_fftr_state = {(kiss_fft_cfg)&g_fft_state, g_fftr_state_tmpbuf, g_fftr_state_super_twiddles};

// IFFT
struct kiss_fft_state_precomputed g_ifft_state  = {256, 1, {4, 64, 4, 16, 4, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {{32767, 0}, {32757, 804}, {32728, 1608}, {32678, 2410}, {32609, 3212}, {32521, 4011}, {32412, 4808}, {32285, 5602}, {32137, 6393}, {31971, 7179}, {31785, 7962}, {31580, 8739}, {31356, 9512}, {31113, 10278}, {30852, 11039}, {30571, 11793}, {30273, 12539}, {29956, 13279}, {29621, 14010}, {29268, 14732}, {28898, 15446}, {28510, 16151}, {28105, 16846}, {27683, 17530}, {27245, 18204}, {26790, 18868}, {26319, 19519}, {25832, 20159}, {25329, 20787}, {24811, 21403}, {24279, 22005}, {23731, 22594}, {23170, 23170}, {22594, 23731}, {22005, 24279}, {21403, 24811}, {20787, 25329}, {20159, 25832}, {19519, 26319}, {18868, 26790}, {18204, 27245}, {17530, 27683}, {16846, 28105}, {16151, 28510}, {15446, 28898}, {14732, 29268}, {14010, 29621}, {13279, 29956}, {12539, 30273}, {11793, 30571}, {11039, 30852}, {10278, 31113}, {9512, 31356}, {8739, 31580}, {7962, 31785}, {7179, 31971}, {6393, 32137}, {5602, 32285}, {4808, 32412}, {4011, 32521}, {3212, 32609}, {2410, 32678}, {1608, 32728}, {804, 32757}, {0, 32767}, {-804, 32757}, {-1608, 32728}, {-2410, 32678}, {-3212, 32609}, {-4011, 32521}, {-4808, 32412}, {-5602, 32285}, {-6393, 32137}, {-7179, 31971}, {-7962, 31785}, {-8739, 31580}, {-9512, 31356}, {-10278, 31113}, {-11039, 30852}, {-11793, 30571}, {-12539, 30273}, {-13279, 29956}, {-14010, 29621}, {-14732, 29268}, {-15446, 28898}, {-16151, 28510}, {-16846, 28105}, {-17530, 27683}, {-18204, 27245}, {-18868, 26790}, {-19519, 26319}, {-20159, 25832}, {-20787, 25329}, {-21403, 24811}, {-22005, 24279}, {-22594, 23731}, {-23170, 23170}, {-23731, 22594}, {-24279, 22005}, {-24811, 21403}, {-25329, 20787}, {-25832, 20159}, {-26319, 19519}, {-26790, 18868}, {-27245, 18204}, {-27683, 17530}, {-28105, 16846}, {-28510, 16151}, {-28898, 15446}, {-29268, 14732}, {-29621, 14010}, {-29956, 13279}, {-30273, 12539}, {-30571, 11793}, {-30852, 11039}, {-31113, 10278}, {-31356, 9512}, {-31580, 8739}, {-31785, 7962}, {-31971, 7179}, {-32137, 6393}, {-32285, 5602}, {-32412, 4808}, {-32521, 4011}, {-32609, 3212}, {-32678, 2410}, {-32728, 1608}, {-32757, 804}, {-32767, 0}, {-32757, -804}, {-32728, -1608}, {-32678, -2410}, {-32609, -3212}, {-32521, -4011}, {-32412, -4808}, {-32285, -5602}, {-32137, -6393}, {-31971, -7179}, {-31785, -7962}, {-31580, -8739}, {-31356, -9512}, {-31113, -10278}, {-30852, -11039}, {-30571, -11793}, {-30273, -12539}, {-29956, -13279}, {-29621, -14010}, {-29268, -14732}, {-28898, -15446}, {-28510, -16151}, {-28105, -16846}, {-27683, -17530}, {-27245, -18204}, {-26790, -18868}, {-26319, -19519}, {-25832, -20159}, {-25329, -20787}, {-24811, -21403}, {-24279, -22005}, {-23731, -22594}, {-23170, -23170}, {-22594, -23731}, {-22005, -24279}, {-21403, -24811}, {-20787, -25329}, {-20159, -25832}, {-19519, -26319}, {-18868, -26790}, {-18204, -27245}, {-17530, -27683}, {-16846, -28105}, {-16151, -28510}, {-15446, -28898}, {-14732, -29268}, {-14010, -29621}, {-13279, -29956}, {-12539, -30273}, {-11793, -30571}, {-11039, -30852}, {-10278, -31113}, {-9512, -31356}, {-8739, -31580}, {-7962, -31785}, {-7179, -31971}, {-6393, -32137}, {-5602, -32285}, {-4808, -32412}, {-4011, -32521}, {-3212, -32609}, {-2410, -32678}, {-1608, -32728}, {-804, -32757}, {0, -32767}, {804, -32757}, {1608, -32728}, {2410, -32678}, {3212, -32609}, {4011, -32521}, {4808, -32412}, {5602, -32285}, {6393, -32137}, {7179, -31971}, {7962, -31785}, {8739, -31580}, {9512, -31356}, {10278, -31113}, {11039, -30852}, {11793, -30571}, {12539, -30273}, {13279, -29956}, {14010, -29621}, {14732, -29268}, {15446, -28898}, {16151, -28510}, {16846, -28105}, {17530, -27683}, {18204, -27245}, {18868, -26790}, {19519, -26319}, {20159, -25832}, {20787, -25329}, {21403, -24811}, {22005, -24279}, {22594, -23731}, {23170, -23170}, {23731, -22594}, {24279, -22005}, {24811, -21403}, {25329, -20787}, {25832, -20159}, {26319, -19519}, {26790, -18868}, {27245, -18204}, {27683, -17530}, {28105, -16846}, {28510, -16151}, {28898, -15446}, {29268, -14732}, {29621, -14010}, {29956, -13279}, {30273, -12539}, {30571, -11793}, {30852, -11039}, {31113, -10278}, {31356, -9512}, {31580, -8739}, {31785, -7962}, {31971, -7179}, {32137, -6393}, {32285, -5602}, {32412, -4808}, {32521, -4011}, {32609, -3212}, {32678, -2410}, {32728, -1608}, {32757, -804}, }};

kiss_fft_cpx g_ifftr_state_tmpbuf[512];
kiss_fft_cpx g_ifftr_state_super_twiddles[256] = {{-402, 32765}, {-804, 32757}, {-1206, 32745}, {-1608, 32728}, {-2009, 32705}, {-2410, 32678}, {-2811, 32646}, {-3212, 32609}, {-3612, 32567}, {-4011, 32521}, {-4410, 32469}, {-4808, 32412}, {-5205, 32351}, {-5602, 32285}, {-5998, 32213}, {-6393, 32137}, {-6786, 32057}, {-7179, 31971}, {-7571, 31880}, {-7962, 31785}, {-8351, 31685}, {-8739, 31580}, {-9126, 31470}, {-9512, 31356}, {-9896, 31237}, {-10278, 31113}, {-10659, 30985}, {-11039, 30852}, {-11417, 30714}, {-11793, 30571}, {-12167, 30424}, {-12539, 30273}, {-12910, 30117}, {-13279, 29956}, {-13645, 29791}, {-14010, 29621}, {-14372, 29447}, {-14732, 29268}, {-15090, 29085}, {-15446, 28898}, {-15800, 28706}, {-16151, 28510}, {-16499, 28310}, {-16846, 28105}, {-17189, 27896}, {-17530, 27683}, {-17869, 27466}, {-18204, 27245}, {-18537, 27019}, {-18868, 26790}, {-19195, 26556}, {-19519, 26319}, {-19841, 26077}, {-20159, 25832}, {-20475, 25582}, {-20787, 25329}, {-21096, 25072}, {-21403, 24811}, {-21705, 24547}, {-22005, 24279}, {-22301, 24007}, {-22594, 23731}, {-22884, 23452}, {-23170, 23170}, {-23452, 22884}, {-23731, 22594}, {-24007, 22301}, {-24279, 22005}, {-24547, 21705}, {-24811, 21403}, {-25072, 21096}, {-25329, 20787}, {-25582, 20475}, {-25832, 20159}, {-26077, 19841}, {-26319, 19519}, {-26556, 19195}, {-26790, 18868}, {-27019, 18537}, {-27245, 18204}, {-27466, 17869}, {-27683, 17530}, {-27896, 17189}, {-28105, 16846}, {-28310, 16499}, {-28510, 16151}, {-28706, 15800}, {-28898, 15446}, {-29085, 15090}, {-29268, 14732}, {-29447, 14372}, {-29621, 14010}, {-29791, 13645}, {-29956, 13279}, {-30117, 12910}, {-30273, 12539}, {-30424, 12167}, {-30571, 11793}, {-30714, 11417}, {-30852, 11039}, {-30985, 10659}, {-31113, 10278}, {-31237, 9896}, {-31356, 9512}, {-31470, 9126}, {-31580, 8739}, {-31685, 8351}, {-31785, 7962}, {-31880, 7571}, {-31971, 7179}, {-32057, 6786}, {-32137, 6393}, {-32213, 5998}, {-32285, 5602}, {-32351, 5205}, {-32412, 4808}, {-32469, 4410}, {-32521, 4011}, {-32567, 3612}, {-32609, 3212}, {-32646, 2811}, {-32678, 2410}, {-32705, 2009}, {-32728, 1608}, {-32745, 1206}, {-32757, 804}, {-32765, 402}, {-32767, 0}, {0, 0}, {0, 0}, {1233, 2}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, };

struct kiss_fftr_state g_ifftr_state ={(kiss_fft_cfg)&g_ifft_state, g_ifftr_state_tmpbuf, g_ifftr_state_super_twiddles};
